// 微信授权功能封装

export const authList = {
  //  wx.getLocation, wx.startLocationUpdate 精确地理位置
  /**
   * 地理位置
   */
  userLocation: {
    value: "scope.userLocation",
    explain: "地理位置",
  },
  //  wx.getFuzzyLocation 模糊地理位置
  /**
   * 地理位置
   */
  userFuzzyLocation: {
    value: "scope.userFuzzyLocation",
    explain: "地理位置",
  },
  //  wx.startLocationUpdateBackground 后台定位
  /**
   * 后台定位
   */
  userLocationBackground: {
    value: "scope.userLocationBackground",
    explain: "后台定位",
  },
  //  live - pusher组件, wx.startRecord, wx.joinVoIPChat, RecorderManager.start 麦克风
  /**
   * 麦克风
   */
  record: {
    value: "scope.record",
    explain: "麦克风",
  },
  //  camera组件, live - pusher组件, wx.createVKSession 摄像头
  /**
   * 摄像头
   */
  camera: {
    value: "scope.camera",
    explain: "摄像头",
  },
  //  wx.openBluetoothAdapter, wx.createBLEPeripheralServer 蓝牙
  /**
   * 蓝牙
   */
  bluetooth: {
    value: "scope.bluetooth",
    explain: "蓝牙",
  },
  //  wx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum 添加到相册
  /**
   * 相册
   */
  writePhotosAlbum: {
    value: "scope.writePhotosAlbum",
    explain: "相册",
  },
  //  wx.addPhoneContact 添加到联系人
  /**
   * 联系人
   */
  addPhoneContact: {
    value: "scope.addPhoneContact",
    explain: "联系人",
  },
  //  wx.addPhoneRepeatCalendar, wx.addPhoneCalendar 添加到日历
  /**
   * 添加到日历
   */
  addPhoneCalendar: {
    value: "scope.addPhoneCalendar",
    explain: "添加到日历",
  },
  //  wx.getWeRunData 微信运动步数
  /**
   * 微信运动步数
   */
  werun: {
    value: "scope.werun",
    explain: "微信运动步数",
  },
  //  wx.chooseAddress 通讯地址（ 已取消授权， 可以直接调用对应接口）
  /**
   * 通讯地址
   */
  address: {
    value: "scope.address",
    explain: "通讯地址",
  },
  //  wx.chooseInvoiceTitle 发票抬头（ 已取消授权， 可以直接调用对应接口）
  /**
   * 发票抬头
   */
  invoiceTitle: {
    value: "scope.invoiceTitle",
    explain: "发票抬头",
  },
  //  wx.chooseInvoice 获取发票（ 已取消授权， 可以直接调用对应接口）
  /**
   * 获取发票
   */
  invoice: {
    value: "scope.invoice",
    explain: "获取发票",
  },
  //  wx.getUserInfo 用户信息（ 小程序已回收， 请使用头像昵称填写， 小游戏可继续调用）
  /**
   * 用户信息
   */
  userInfo: {
    value: "scope.userInfo",
    explain: "用户信息",
  },

}

/**
 * 获取授权
 */
export function getWxAuth(authValue, successCallback, failCallback) {
  // 通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" 这个 scope
  wx.getSetting({
    // withSubscriptions: true,
    success(res) {
      // 查询是否存在某些功能的授权,如果不存在,向用户请求发起授权询问
      if (wx.$_.isArray(authValue)) {
        for (let i of authValue) {
          if (!res.authSetting[i.value]) {
            wx.authorize({
              scope: i.value,
              success() {
                if (successCallback instanceof Function) {
                  successCallback(i)
                }
              },
              fail() {
                wx.showToast({
                  title: `${i.explain}功能受限,无法正常使用`,
                  icon: "error"
                })
                if (failCallback instanceof Function) {
                  failCallback(i)
                }
              }
            })
          }
        }
      } else if (typeof authValue === 'object') {
        if (!res.authSetting[authValue.value]) {
          wx.authorize({
            scope: authValue.value,
            success() {
              if (successCallback instanceof Function) {
                successCallback(i)
              }
            },
            fail() {
              wx.showToast({
                title: `${authValue.explain}功能受限,无法正常使用`,
                icon: "error"
              })
              if (failCallback instanceof Function) {
                failCallback(i)
              }
            }
          })
        }
      }
    }
  })
}

/**
 * 是否授权某个功能
 */
export function isWxAuthFun(authValue, callback) {

  if (authValue) {
    wx.getSetting({
      // withSubscriptions: true,
      success(res) {
        callback(res.authSetting[authValue.value])
      }
    })
  }
}

/**
 * 唤起 客户端小程序设置界面， 返回用户设置的操作结果。 设置界面只会出现小程序已经向用户请求过的权限。
 */
export function wxAuthOpenSeeting() {
  wx.openSetting({
    // withSubscriptions: true,
    success(res) {
      console.log(res.authSetting);
    },
    fail() {
      console.log('失败0000=');

    }
  })
}